# NumPy 提供了一个 矩阵库模块numpy.matlib，
# 该模块中的函数返回的是一个 matrix 对象，而非 ndarray 对象。
# 矩阵由 m 行 n 列（m*n）元素排列而成，矩阵中的元素可以是数字、符号或数学公式等。

# matlib.empty() 返回一个空矩阵，所以它的创建速度非常快。
import numpy.matlib
import numpy as np

# 矩阵中会填充无意义的随机值
print(np.matlib.empty((2, 2)))
# [[1.81191899e+167 6.65173396e-114]
# [9.71613265e-243 6.96320200e-077]]

# numpy.matlib.zeros() 创建一个以 0 填充的矩阵，示例如下：
print(np.matlib.zeros((2, 2)))
# [[ 0.  0.]
# [ 0.  0.]]

# numpy.matlib.ones() 创建一个以 1 填充的矩阵。
print(np.matlib.ones((2, 2)))
# [[ 1.  1.]
# [ 1.  1.]]

# numpy.matlib.eye() 返回一个对角线元素为 1，而其他元素为 0 的矩阵 。
# n：返回矩阵的行数；
# M：返回矩阵的列数，默认为 n；
# k：对角线的索引；
# dtype：矩阵中元素数据类型。
print(np.matlib.eye(n=3, M=4, k=0, dtype=float))
# [[1. 0. 0. 0.]
# [0. 1. 0. 0.]
# [0. 0. 1. 0.]]

# numpy.matlib.identity() 该函数返回一个给定大小的单位矩阵，矩阵的对角线元素为 1，而其他元素均为 0。
print(np.matlib.identity(5, dtype=float))
# [[ 1.  0.  0.  0.  0.]
# [ 0.  1.  0.  0.  0.]
# [ 0.  0.  1.  0.  0.]
# [ 0.  0.  0.  1.  0.]
# [ 0.  0.  0.  0.  1.]]

# numpy.matlib.rand() 创建一个以随机数填充，并给定维度的矩阵
print(np.matlib.rand(3, 3))
# [[0.23966718 0.16147628 0.14162   ]
# [0.28379085 0.59934741 0.62985825]
# [0.99527238 0.11137883 0.41105367]]


# 因为 matrix 只能表示二维数据，而 ndarray 也可以是二维数组，所以两者可以互相转换
i = np.matrix('1,2;3,4')
j = np.asarray(i)
print(j)
k = np.asmatrix(j)
print(k)
# ndarray：
# [[1  2]
# [3  4]]
# matrix：
# [[1  2]
# [3  4]]